#ifndef VENDMACH_H
#define VENDMACH_H

#include <iostream>
#include <vector>
#include <string>

#include "drink.h"
#include "peripherals.h"
#include "user.h"
#include "shopcar.h"

using namespace std;

/*
    使用数组作为自动售货机的容器，每种饮料对应一个下标
    根据下标找到对应的电机，电机执行推动的操作
    购物车记录编号和数量，根据编号找到对应的饮料，并执行相应的操作

    写入文件，读取文件，记录当前的容器里的饮料信息，包括饮料名称、饮料数量、饮料价格
    在启动后，读取文件，恢复当前的容器里的饮料信息，并通过服务器同步饮料价格信息
*/
class VendingMachine // 自动售货机类
{
    friend add(Drink &drink)
    {

    }
private:
    unsigned int id; // 自动售货机编号

    Drink *currentDrink; // 饮料容器
    //vector<Drink> drinks; // 饮料容器
    peripherals *motor;  // 外设对象，电机对象。数量与容器对应
    int MaxCapacity;     // 可容纳饮料的最大种类数

    ShopCar* shopcar; // 购物车,map<int, int>记录编号和数量
    std::map<int, int>

public:
    VendingMachine(unsigned int _id, int _MaxCapacity) : id(_id), MaxCapacity(_MaxCapacity)
    {
        currentDrink = new Drink[MaxCapacity];
        motor = new peripherals[MaxCapacity];
        shopcar = new ShopCar();
    }

    void Start()
    {
        SelfTest(); // 自检
    }
    bool SelfTest();            // 自检
    Syn_price_info();           // 同步价格信息
    Syn_vending_records();      // 同步售货记录信息

    show_menu();                // 显示菜单
    show_shopcar();             // 显示购物车
    show_drink();

    add_drink(Drink *drink);    // 添加饮料
    remove_drink(int id);       // 移除饮料

    CheckOut();                // 结账


    ~VendingMachine()
    {
    }
}

#endif